home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekikoh Dennoh Club 1
/
Gekikoh Dennoh Club Vol. 1 (Japan).7z
/
Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin
/
tools
/
cdc
/
deve.lzh
/
CDC.MAC
< prev
next >
Wrap
Text File
|
1997-02-08
|
20KB
|
765 lines
*-<□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□>-
*
* 常駐型 オーディオCD コントローラー
*
* CDC.x
*
* Copyright 1994 1995 1996 TNB製作所
*
*
*
* 基本的にTRAP #5はSCSIを使うのがあるので、OPM割り込みなどでで使った
* りしないこと(基本的にはね)
*
*
CDC macro callname
moveq.l #callname,d0
trap #5
endm
_CDC_CHK_ macro
.local _CC1,_CC2,_CC3
movem.l d0/a0/a1,-(sp)
suba.l a1,a1
moveq #$81,d0
trap #15
movea.l d0,a1
move.b $25*4.w,d0
bne _CC2 * ベクタナンバーが書かれてる
movea.l $25*4.w,a0
cmp.l #'CDC_',-8(a0)
bne _CC2
cmp.l #'trap',-4(a0)
bne _CC2
moveq #$81,d0
trap #15
moveq #-1,d0 *常駐
bra _CC3
_CC2:
moveq #$81,d0
trap #15
moveq #0,d0 *非常駐
_CC3:
movem.l (sp)+,d0/a0/a1
.endm
_CDC_CHK_S macro
.local _CC1,_CC2,_CC3
movem.l d0/a0/a1,-(sp)
move.b $25*4.w,d0
bne _CC2 * ベクタナンバーが書かれてる
movea.l $25*4.w,a0
cmp.l #'CDC_',-8(a0)
bne _CC2
cmp.l #'trap',-4(a0)
bne _CC2
moveq #-1,d0 *常駐
bra _CC3
_CC2:
moveq #0,d0 *非常駐
_CC3:
movem.l (sp)+,d0/a0/a1
.endm
*---------------------------------------------------
* ドライバー常駐チェック
* trap5のベクタアドレス-8から'CDC_trap'があるかをチェック
* (アドレス+2から各ルーチンアドレスが列ぶ)
* マクロ _CDC_CHK_ が用意してある(USERモードで使うこと)
*
* _CDC_CHK_
* beq 非常駐
* bne 常駐
*
*---------------------------------------------------
*
* SYSTEM 関係
*
_CDC_VERSION equ $00
*--------------------------------------------
*
* ・ドライバーのバージョンチェック
*
* [引 数] なし
* [戻り値] d0.l = $0110
*
_CDC_INIT equ $01
*--------------------------------------------
*
* ・CD 及び ドライバーの初期化をする ([CLR]キー同等)
*
* [引 数] なし
* [戻り値] なし
*
* 演奏中止し、モードもクリアします。ただし、プログラムは残
* ります。
*
* [参 考] CD-ROM に対し REZEROUNIT を送りますので多少時間の
* かかる場合があります。割り込み中など処理を早くした
* い場合、_CDC_STOP を使用するといいでしょう。
*
*---------------------------------------------------
*
* ワークアドレスゲット 関係
*
_CDC_STAT equ $02
*--------------------------------------------
*
* ・CDの現在の状態の書かれたアドレスを返す
*
* [引 数] なし
* [戻り値] d0.l = ワークアドレス
*
* offset
* ( 0) .dc.w 0;NoCD 1;SetCD
* ( 2) .dc.l 状態 0x11;演奏中,0x12;一時停止,0x13;停止
* ( 6) .dc.l 曲番号
* (10) .dc.l 演奏中の曲の経過時間 (MSF型)
* (14) .dc.l CD絶対総 経過時間 (MSF型)
* (18) .dc.l 現在演奏曲のながさ (MSF型)
* (22) .dc.l CD名アドレス
* (26) .dc.l 曲名アドレス
* (30) .dc.l LED文字アドレス -----以下LED部に表示される物
* (34) .dc.l LED数値 曲番号
* (38) .dc.l LED数値 1以上;プログラムナンバー
* 0;表示無し -1;MAX= -2;INP= -3;Vol
* (42) .dc.l LED数値 タイム (MSF型)
* (46) .dc.l LEDの状態
* ┌bit 0 ■:停止
* │bit 1 >:再生
* │bit 2 ||:一時停止
* イズレカ│bit 3 >>:早送り
* └bit 4 <<:巻き戻し
* ┌bit 5 ⊂:オート
* └bit 6 ◯:リピート
* bit 7 R:ランダム
* bit 8 P:メモリー
* (bit 9 B:BGM)
* (50) .dc.b 入力されている数値(上)
* (51) .dc.b 入力されている数値(下)
* (52) .dc.w LED数値 タイム のモード
* 0;ノーマル
* 1;リバース
* 2;トータル
* 3;トータルリバース
* (54) .dc.w Vol数値
* (56) .dc.w MasterVol数値(0ならボリューム機能無し)
*
* 表示 LED 文字アドレスは基本的に同じアドレスを返し
* ます。内容が変わったかどうかは曲名アドレスを監視す
* ることで可能です。
*
* CDの現在の状態の書かれたアドレスを返します。アドレスは
* 固定されてますが、内容はトラップ時にのみ更新されるものもあ
* ります。
*
* [参 考] CDC.x の機能が停止ているばあい同じ値を返します。
* ( LED 文字アドレスも0の時もあります。)
* _CDC_POWER($35)でチェックしてください。
*
_CDC_TRACKS equ $03
*--------------------------------------------
*
* ・CD-DA のCDの総合時間、曲数、曲の演奏時間、曲名の書かれ
* たアドレスを返す
*
* [引 数] なし
* [戻り値] d0.l = 曲名リストワークアドレス
*
* offset
* ( 0) .dc.w 0;NoCD 1;SetCD
* ( 2) .dc.l CDC.xの最大記憶数(以下,記憶数)
* ( 6) .dc.l CDの曲数
* (10) .dc.l CDの全演奏時間
* (14) .dc.l CDCLISTにあったか -1ならあった
* (18) .dcb.b 40,0 CD名 40-1文字
* (58) .dsb.b (記憶数)*40 各曲の名前 40-1文字
* .dsb.l (記憶数) 各曲の演奏時間+拡張曲名flag
* .dsb.l (記憶数) 各曲のスタート時間
* (↑最上位ビットが立っ
* ていれば データトラック)
*
* CD名、曲名以外の書き替えは禁止です。名前は変更可能です。
*
*---------------------------------------------------
*
* 外部コントロール用 関係
*
_CDC_SCSI_CHK equ $04
*--------------------------------------------
*
* ・SCSI の状態を返す
*
* [引 数] なし
* [戻り値] d0.l = 0 ; 使用可能
* < 0 ; 使用不可
*
* TRAP #5 で SCSI を使用するものの場合このコールでチェック
* してから使用してください。
*
_CDC_RELED equ $05
*--------------------------------------------
*
* ・LED 部の書き直し、CD-ROM の状態を再チェック
*
* [引 数] なし
* [戻り値] なし
*
* LED の書き直しを行います。TRAP #5 で CDC.x を操作した場
* 合すぐにLED部(_CDC_STAT のワークも含む)に表れないものがあ
* ります。TIMER-C が生きている場合一秒(/Tによる)以内には書き
* 直されますが、このコールを使えばすぐに書き直されます。
* TRAP#5を使わず外部で演奏開始等した場合もこのコールを呼べ
* ば認識します。
* また、入力された数値のキャンセルも行います。
*
* [参 考] CDCコール番号の $1? はすぐに書き直されるようになっ
* てます。
*
*---------------------------------------------------
*
* キーコントロール 関係
*
_CDC_INKEY equ $07
*--------------------------------------------
*
* ・CDCのキー割り込みルーチンを呼ぶ
*
* [引 数] d1.b = キーボードコード
* [戻り値] なし
*
* キーボードのコードを送ることで CDC をコントロールする
*
*┌─┐┌─┐ ┌─┬─┬─┐┌─┬─┬─┬─┐
*│ ││ │ ─┬──┐│ │ │ ││ │記│登│ │
*└─┘└─┘ ─┴──┘└━┴━┴━┘└━┴─┴─┴─┘
*┌─┬─┬ ─┬──┐┌─┬─┬─┐┌─┬─┬─┬─┐
*│ES│ │ │ BS ││HM│ │DL││CL│/│*│-│
*├─┴┬┴ ┬┴┬┴┬ ┬┴┬┴──┤├─┼━┼─┤├─┼─┼─┼─┤
*│ TAB│ │E│R│ │[゚│ ││RU│RD│UN││7│8│9│+│
*├──┼ ┴┬┴┬┴ ┴┬┴┐ CR │├─┼─┼─┤├─┼─┼─┼─┤
*│ │]ム│ ││ │↑│ ││4│5│6│=│
* ┴┬┴──┤│←├─┤→│├─┼─┼─┼─┤
* │ ││ │↓│ ││1│2│3│ │
* ┴┬──┘├─┴┬┴─┤├─┼─┼─┤EN│
* │ │ │ ││0│,│.│ │
* ━┘ └──┴──┘└─┴─┴─┴─┘
*
*┌─┐┌─┐ ┌─┬─┬─┐┌─┬─┬─┬─┐
*│ ││ │ ─┬──┐│ │ │ ││ │52│53│ │
*└─┘└─┘ ─┴──┘└━┴━┴━┘└━┴─┴─┴─┘
*┌─┬─┬ ─┬──┐┌─┬─┬─┐┌─┬─┬─┬─┐
*│01│ │ │ 0F ││36│ │37││3F│40│41│42│
*├─┴┬┴ ┬┴┬┴┬ ┬┴┬┴──┤├─┼━┼─┤├─┼─┼─┼─┤
*│ 10 │ │13│14│ │1C│ ││38│39│3A││43│44│45│46│
*├──┼ ┴┬┴┬┴ ┴┬┴┐ 1D │├─┼─┼─┤├─┼─┼─┼─┤
*│ │29│ ││ │3C│ ││47│48│49│4A│
* ┴┬┴──┤│3B├─┤3D│├─┼─┼─┼─┤
* │ ││ │3E│ ││4B│4C│4D│ │
* ┴┬──┘├─┴┬┴─┤├─┼─┼─┤4E│
* │ │ │ ││4F│50│51│ │
* ━┘ └──┴──┘└─┴─┴─┴─┘
*
* $3F [CLR] = CDC.x初期化
* $4E [ENT] = 演奏
* $4A [=] = PAUSE/RESUME
* $3B/$3D [←][→] = 巻戻し/早送り
* $38 [R-UP] = 1曲戻し *
* $39 [R-DN] = 1曲送り
* $3A [UNDO] = リピートモード
*
* などキー操作と同じ。他に
*
* $52 [記号入力]= 数値入力キャンセル。LEDの初期化にもなる
* (CDC_RELEDと同じ機能です。)
*
* があります(キー操作では出来ないようになってます)。
*
* 演奏開始の場合等、他のコールと違うのは入力されている数値
* に影響される点です。もしこのコールだけで指定の曲演奏したい
* 場合、まず、数値キーコードを送ってから演奏すれば可能です。
*
* [←][→](サーチキー)を使う場合は、連続で送ったあと、最後
* に 0 を送ってください。この時サーチ先から演奏されます。
*
* $38は連続でコマンドを送ったりすることで動作が違うので単
* 純に、曲の頭から、1曲戻すと言う場合 _CDC_MVPLAY($13)を使
* 用してください。
*
* [★注意]ver 1.06以前では
* $42/$46 [-][+] = 巻戻し/早送り
* でした。。
*
*---------------------------------------------------
*
* プログラム関係
*
_CDC_PROG equ $08
*--------------------------------------------
*
* ・CDCのプログラムワークアドレスを返す
*
* [引 数] なし
* [戻り値] d0.l = メモリワークアドレス
*
* ( 0) .dc.w プログラム数
* ( 2) .ds.b 256,曲ナンバー
*
* プログラムの直接書き替えも可能。ただし、書き替えたあとも
* う一度 _CDC_PROG をコールすること。プログラムを全部消去し
* たい場合、プログラム数を0に書き替えることで可能。
*
* [★注意]ver 1.08以前では
* ( 2) .ds.b 100,曲ナンバー
* でした。。
*
_CDC_PROGIN equ $09
*--------------------------------------------
*
* ・指定曲ナンバーをプログラムに記憶する
*
* [引 数] d1.l = 曲ナンバー
* = -1 ; 現在プログラムされている数のみ返す
* d2.l = プログラムナンバー (0~)
* = -1 ;プログラムの最後に追加します ([.])
* [戻り値] d0.l = 現在プログラムされている数 ; 正常終了
* < 0 ; エラー(プログラム100を越える)
*
_CDC_PROGOUT equ $0A
*--------------------------------------------
*
* ・最後のプログラムの曲をプログラムから消す
*
* [引 数] なし
* [戻り値] d0.l = 現在プログラムされている数 ; 正常終了
* < 0 ; エラー
*
_CDC_PROGTIME equ $0F
*--------------------------------------------
*
* ・プログラムされた曲の総演奏時間を計算する
*
* [引 数] なし
* [戻り値] d0.l = ワークアドレス
* < 0 ; エラー
* ( 0) .dc.l 演奏予定総長さ
* ( 4) .dc.l 演奏された曲の合計長さ
*
* プログラムされて曲の合計と演奏された曲の合計長さを返しま
* す。ただし、演奏されていない時は0,0がかえります。演奏中
* にプログラムの変更があると数値がおかしくなることがあります
* (変更されない)。
*
* [参 考]ランダム演奏時にも、ノーマル時にも有効。
* 意味がないので、そのうち消えるかも知れないコール
* 使用禁止 ^^;
*
*---------------------------------------------------
*
* 演奏関係
*
_CDC_PLAY equ $10
*--------------------------------------------
*
* ・曲ナンバー指定によりノーマル演奏開始
*
* [引 数] d1.l = 開始曲ナンバー (0ならCDC管理演奏)
* d2.l = 終了曲ナンバー (-1なら最後まで)
* [戻り値] d0.l = 0 ; 正常終了
* < 0 ; エラー
*
_CDC_PAUSE equ $11
*--------------------------------------------
*
* ・CD演奏の一時停止。演奏していない場合何もしない
*
* [引 数] なし
* [戻り値] なし
*
_CDC_RESUME equ $12
*--------------------------------------------
*
* ・CD演奏の一時停止の解除。演奏中は何もしない
*
* [引 数] なし
* [戻り値] なし
*
_CDC_MVPLAY equ $13
*--------------------------------------------
*
* ・CD演奏の曲を変える
*
* [引 数] d1.l = 現在演奏中の曲からの ±値 (-1~1)
* [戻り値] d0.l = 0 ; 正常終了
* < 0 ; エラー
*
* 0を指定することで演奏中の曲を最初から。プログラムされて
* いる場合、プログラム順に曲を移動、演奏します。ランダムモー
* ド時は、どの曲にいくか判りません。
*
_CDC_BGM equ $14
*--------------------------------------------
*
* ・指定アドレス間を繰り返し演奏する(BGMモード演奏)
*
* [引 数] d1.l = 開始トラックor開始アドレス
* d2.l = 終了アドレス(0ならその曲の最後の数値)
* d3.l = ループアドレス(0ならd1と同じ値に)
* d4.l = ループ終了アドレス(0ならd2と同じ値に)
* [戻り値] d0.l = 0 ; 正常終了
* < 0 ; エラー
*
* d1.l は $100 未満であればトラック指定になります。
* d1.l が $100 以上であればアドレス指定になります。
*
* _CDC_MODE の戻り値が bit4;BGMが立ちます
*
* [参 考] 基本的に BGMとして CD を使う場合のコールなので
* LED部にBGMモードとは表示されません。
* 使う場合、キーボードからのコントロールを殺したほう
* がいいでしょう。
* ZCDC.x で使用してます。
*
_CDC_STOP equ $15
*--------------------------------------------
*
* ・CD演奏を停止する
*
* [引 数] なし
* [戻り値] なし
*
* _CDC_INIT に比べ高速です。割り込み中など処理が止まるのを
* 避けたい場合のみ使用してください。CDC.x 内部では「停止」に
* なりますが、CD-ROM自体の状態は一時停止になっています。また、
* LED の書き替えもすぐに行われません。
*
_CDC_PLAYWAIT equ $1D
*
* ・演奏開始後、ステイタス待ちをする( /PM 使用時対策用)
*
* [引 数] なし
* [戻り値] なし
*
* /PM 使用時、演奏開始を待たずに次の作業に移ります。が、タ
* イミングを取るためにはこれではまずい場合があります(ゲーム
* のBGMなど)。その時、これを実行します。演奏開始するまで待ち
* ます。
* /PM 使用していない場合や、演奏開始状態でない場合は無視さ
* れます。
*
_CDC_VOL equ $1E
*
* ・ボリュームを変更する
*
* [引 数] d1.l = 0~255 ; ボリュームを指定
* = -1 ; 現在のボリューム値を返す
* [戻り値] d0.l = 現在のボリューム値
* = -1 ; ボリューム非対応,エラー
*
*
* [参 考] マスターボリュームは _CDC_STAT で確認出来ます。
*
_CDC_FADEOUT equ $1F
*
* ・演奏をフェードアウトする。
*
* [引 数] d1.l = 0 ; フェードアウト開始
* = 1~255 ; フェードアウトの速度指定
* = -1 ; 現在のフェードアウト速度を返す
* [戻り値] d0.l = 現在のフェードアウト速度
* = -1 ; フェードアウトが出来ない。
* = -2 ; 既にフェードアウト始めている。
*
*---------------------------------------------------
*
* CDC DRIVE MODE 関係
*
_CDC_DRIVE equ $30
*--------------------------------------------
*
* ・CDCの心臓を動かす
*
* [引 数] なし
* [戻り値] なし
*
* TIMER-Cを乗っ取っていると、CDCが動きません。が、直接ある
* 一定期でこれをコールすれば大丈夫です。
*
* [参 考] MUTERMモード対応にも対応してます。が、使用するこ
* とはないでしょう。
*
_CDC_MODE equ $31
*--------------------------------------------
*
* ・CDCの演奏モードを設定(トグル)
*
* [引 数] d1.l = モード
* = 0 ; オート
* = 1 ; リピート
* = 2 ; ランダム
* = -1 ; モードののみ返す
* [戻り値] d0.l = 現在のモード ; 正常終了
* 現在のモードは
* bit0 :オート
* bit1 :リピート
* bit2 :ランダム
* bit3 :メモリー
* [bit4 :BGM]
*
* 設定は _CDC_INKEY($7)でそれぞれのキーコードを、送った時
* を同じ処理をします(ただし入力数字は無視されます)ので、場合
* により演奏開始されます。
*
* モード変更はトグルで行われるので一度モードを調べてから設
* 定したほうがいいでしょう。
*
_CDC_KEYMODE equ $32
*--------------------------------------------
*
* ・CDCのキー操作関係のモードを設定
*
* [引 数] d1.l = モード
* 0 ; 一切受け付けない (-KS)
* 1 ; 受け付ける
* -1 ; 現在のモードのみ返す
* [戻り値] d0.l = 前のモード ; 正常終了
*
_CDC_LED equ $33
*--------------------------------------------
*
* ・CDCのLEDの表示モードを設定する
*
* [引 数] d1.l = 0 ; 非表示モード
* 1 ; 表示モード
* 2 ; 左部のみ表示モード
* = -1 ; 現在の値
* [戻り値] d0.l = 前のモード ; 正常終了
* < 0 ; エラー
*
* 表示モードにしてもTEXTが使われていると表示されません
*
* [参 考] Trapコールで強制LED表示モードはありません
*
* [★注意]ver 1.06以前では
* [引 数] d1.l = 1 ; 非表示モード
* 0 ; 表示モード
* でした。。
*
_CDC_TIMING equ $34
*--------------------------------------------
*
* ・CDチェックする間隔設定(基本的に使用禁止)
*
* [引 数] d1.w = 1/100s単位
* = -1 ; 現在の値
* [戻り値] d0.w = 前の値(単位1/100s) ; 正常終了
* < 0 ; エラー
*
* 間隔チェックには IOCS の TIMER-C のワークを見ているので
* TIMER-C を変更している場合、意味がありません。
*
_CDC_POWER equ $35
*--------------------------------------------
*
* ・CDC の機能を制御
*
* [引 数] d1.l = 1 ; 機能する
* = 0 ; 停止する ([ESC])
* = -1 ; 現在の値
* [戻り値] d0.l = 前の値 ; 正常終了
* < 0 ; エラー
*
* 機能を停止しても trap #5 での操作も可能ですが、_CDC_DRIVE
* を常用する必要があります。
*
_CDC_TRACKMODE equ $36
*--------------------------------------------
*
* ・トラック記憶モードを変える(演奏も停止します)。
*
* [引 数] d1.l = 0 ; タイトルリストファイルを参照、
* 拡張トラック設定
* = 1 ; 拡張トラック設定解除
* [戻り値] なし
*
* タイトルリストファイルからの登録を行います。タイトルリス
* トファイルを変更した時これを実行すれば読み込んでくれます。
*
* ジュークボックスモード時は使用禁止です、
*
* [参 考] d1.l==1 は主にZCDC.xで使用します。普通の音楽演奏の
* 場合は意味がないでしょう。
*
_CDC_KEYCANSEL equ $37
*--------------------------------------------
*
* ・CDCのキー操作無効を個別に設定
*
* [引 数] d1.l = 無効にするキーボードコード
* = -1 ; 全てもとに戻す
* [戻り値] なし
*
* アプリでキーボードからのコントロールが困る物がある場合、
* 特定のキーのみ無効に出来ます。アプリ終了時もとに戻すこと。
*
* [参 考] スイッチ -B[n]でも、もとに戻すことが出来ます。
*
_CDC_TIMELED equ $38
*--------------------------------------------
*
* ・CDCのTIMEのLEDの表示モードを設定する
*
* [引 数] d1.l = 0 ; ノーマル
* 1 ; リバース
* 2 ; トータル
* 3 ; トータルリバース
* = -1 ; 現在の値
* [戻り値] d0.l = 前のモード ; 正常終了
* < 0 ; エラー
*
_CDC_LEDXY equ $39
*--------------------------------------------
*
* ・CDCのLEDの座標を得る
*
* [引 数] なし
* [戻り値] d0.wh = X座標
* d0.wl = Y座標
*
* [★注意]ver 1.08以降新規です。
*
_CDC_SCSIID equ $3a
*--------------------------------------------
*
* ・CDCの管理しているSCSI-ID(LUN)を得る
*
* [引 数] なし
* [戻り値] d0.wh = LUN
* d0.wl = ID
*
* [★注意]ver 1.09以降新規です。
*
_CDC_EJEEMU equ $3b
*--------------------------------------------
*
* ・CDCの管理しているSCSI機器が一度エジェクトされた事にする
*
* [引 数] なし
* [戻り値] なし
*
* [★注意]ver 1.09以降新規です。
*
_CDC_CHGLUN equ $3c
*--------------------------------------------
*
* ・LUNを切り換える
*
* [引 数] d1.l = LUN (0~7)
* = -1 ; 現在の値
* [戻り値] d0.l = LUN (0~7) ; 正常終了
* = 100 ; ジュークボックスモード
* < 0 ; エラー
*
* LUNを切り換えます。切り換えたと同時にタイトルリストファ
* イルからの登録も行います。
*
* [★注意]ver 1.09以降新規です。
*
*---------------------------------------------------
*
* CDC ERROR CORDS
*
*
* -1 ;
* -2 ; Play Audio Begin ・ Play Audio Block Count Command error'演奏できない'
* -3 ; Start Track Address or ReadTOC Command error'演奏できない'
* -4 ; 指定された曲番号は、存在しない
* -5 ; Leadout Track Address or ReadTOC Command error
* -100 ; CD-ROM でない 準備されていない
*
*
* 戻り値としてd0が使われていなくても破壊されます.
*
*
*---------------------------------------------------
*
* CDC バージョンの差
*
*
* 以下のコールは_CDC_VERSIONで得られる数値の$107未満と以降では引数等に違
* ってしまっています。ご注意下さい。
*
* _CDC_INKEY equ $07
* _CDC_LED equ $33
*
* 以下のコールは_CDC_VERSIONで得られる数値の$108以降新規です。
*
* _CDC_LEDXY equ $39
*
* 以下のコールは_CDC_VERSIONで得られる数値の$109以降新規です。
*
* _CDC_SCSIID equ $3a
* _CDC_EJEEMU equ $3b
* _CDC_CHGLUN equ $3b
*
*